1 using System.Collections;
2 using
System.Collections.Generic;
3 using
UnityEngine;
4 using
System;
5
6 public
enum PieceType {
7     NONE,
8     CIRCLE,
9     TRIANGLE,
10     SQUARE,
11     HEXAGON,
12     CROSS,
13     RECTANGLE,
//Sample
14 }

15
16 public
class Piece : Movable, IClickable {
17
18     
[SerializeField]
19     
private PieceType pieceType;
20     
[SerializeField]
21     
private Node node;
22     
[SerializeField]
23     
private MovementType movementType;
24     
25     
private IPieceMovement pieceMovement;
26     
private bool dropping;
27
28     
private List<Node> possibleMoves;
29     
private List<Node> possibleEats;
30
31     
public IPieceMovement PieceMovement {
32         
get {return pieceMovement;}
33         
set {
34             pieceMovement =
value;
35         }
36     }
37
38     
/*
39     
private Piece check;
40
41     
public bool Checking {
42         
get {return check != null;}
43     }
44
45     
public Piece Check {
46         
get {return check;}
47         
set {check = value;}
48     }
49     */

50
51     
public bool IsMoved {
52         
get {
53             
if (pieceMovement != null) {
54                 
return pieceMovement.IsMoved();
55             }
56
57             
return false;
58         }
59     }
60
61     
public List<Node> PossibleMoves {
62         
get { return possibleMoves;}
63     }
64
65     
public List<Node> PossibleEats {
66         
get {return possibleEats;}
67     }
68
69     
public PieceType PieceType {
70         
get {return pieceType;}
71     }
72
73     
public MovementType MovementType {
74         
get {return movementType;}
75     }
76
77     
void Awake() {
78         possibleEats =
new List<Node>();
79         possibleMoves =
new List<Node>();
80     }
81
82
83     
protected override void Start() {
84         
base.Start();
85     }
86
87     
public void HighlightPossibleMoves() {
88         
for (int i = 0; i < possibleMoves.Count; i++) {
89             possibleMoves[i].HighlightMove();
90         }
91     }
92
93     
public void UnHighlightPossibleMoves() {
94         
for (int i = 0; i < possibleMoves.Count; i++) {
95             possibleMoves[i].UnhighlightMove();
96         }
97     }
98
99     
public void HighlightPossibleEats() {
100         
for (int i = 0; i < possibleEats.Count; i++) {
101             possibleEats[i].HighlightEat();
102         }
103     }
104
105     
public void UnHighlightPossibleEats() {
106         
for (int i = 0; i < possibleEats.Count; i++) {
107             possibleEats[i].UnhighlightEat();
108         }
109     }
110
111     
public bool IsPossibleMove(Node node) {
112         
return this.possibleMoves.Contains(node);
113     }
114
115     
public bool IsPossibleEat(Node node) {
116         
return this.possibleEats.Contains(node);
117     }
118
119     
public void AddPossibleMoves(params Node[] nodes) {
120         
for (int i = 0; i < nodes.Length; i++) {
121             
this.possibleMoves.Add(nodes[i]);
122         }
123     }
124
125     
public void AddPossibleEats(params Node[] nodes) {
126         
for (int i = 0; i < nodes.Length; i++) {
127             
this.possibleEats.Add(nodes[i]);
128         }
129     }
130
131     
public void ClearPossibleMoves() {
132         
while (possibleMoves.Count > 0) {
133             Node node = possibleMoves[
0];
134             possibleMoves.Remove(node);
135         }
136     }
137
138     
public void ClearPossibleEats() {
139         
while (possibleEats.Count > 0) {
140             Node node = possibleEats[
0];
141             possibleEats.Remove(node);
142         }
143     }

144
145 /*
146     
public void ClearCheck(GCPlayer player) {
147         
if (node != null) {
148             node.UnhighlightCheck();
149         }
150         
if (check != null) {
151             check.Node.UnhighlightCheck();
152             check =
null;
153         }
154         
if (player != null) {
155             player.CheckedBy =
null;
156         }
157     }
158 */

159
160     
public void Compute() {
161         pieceMovement.Compute();
162     }
163
164     
public override void MoveToXZ(Node node, Action finishCallback) {
165         
base.MoveToXZ(node, finishCallback);
166         pieceMovement.Moved();
167     }
168
169     
public string ChessCoords {
170         
get {
171             
if (node == null) return null;
172
173             
return node.ChessCoords;
174         }
175     }
176
177     
public Node Node {
178         
get {return node;}
179     }
180
181     
public void UpdateNode(Node n) {
182         
if (node != null) {
183             node.Clear();
184         }
185         node = n;
186         
if (node != null) {
187             node.Piece =
this;
188         }
189     }
190
191     
public bool Inform<T>(T arg) {
192         
//TODO
193         
return true;
194     }
195
196     
public void Highlight() {
197         SetEmission(GameManager.Instance.PieceHighlightColor);
198     }
199
200     
public void ZeroGravity() {
201         gameObject.GetComponent<Rigidbody>().useGravity =
false;
202     }
203
204     
public void Pickup() {
205         Highlight();
206         ZeroGravity();
207         MoveBy(
new Vector3(0,1,0), null);
208     }
209
210     
public void Drop() {
211         dropping =
true;
212         SetEmissionOriginal();
213         StopMoveCoroutine();
214         gameObject.GetComponent<Rigidbody>().useGravity =
true;
215         
//GCPlayer currPlayer = GameManager.Instance.CurrentPlayer;
216         UnHighlightPossibleEats();
217         UnHighlightPossibleMoves();
218         ready =
false;
219     }
220
221     
//EXPERIMENT
222      
void OnCollisionEnter(Collision collision) {
223         
if (dropping && collision.collider.gameObject) {
224             ready =
true;
225             dropping =
false;
226         }
227     }
228
229 }


RECTANGLE, Sample

TODO

GCPlayer currPlayer = GameManager.Instance.CurrentPlayer;

EXPERIMENT



Gõ tìm kiếm nhanh...